package zifuchuan;

public class _04替换字符串中的空格 {
    /**
     请编写一个方法，将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符，
     并且知道字符串的真实长度(小于等于1000)，同时保证字符串由大小写的英文字母组成。
     给定一个string iniString 为原始的串，以及串的长度 int len, 返回替换后的string。
     测试样例：
     "Mr John Smith”,13
     返回："Mr%20John%20Smith"
     ”Hello  World”,12
     返回：”Hello%20%20World”
     */
    public static void main(String[] args) {
        String initString = "Mr John Smith";
        //String replace = replace(initString, 13);
        String rep = replaceSpace("Mr John Smith00000000".toCharArray(), 13);
        //System.out.println(replace);
        System.out.println(rep);
        System.out.println(rep);
    }

    public static String replace(String initString,int len){
        return initString.replaceAll("\\s","%20");
    }

    //快慢指针移动法
    //如果原数组中有一个空格，数组长度加2，定义两个指针，一个指向最新长度尾部p2，一个指向原长度的尾部p1
    //如果p1是空格，则p2--为0，p2--为2，p2--为%,否则直接将p1位置的字符放在p2
    //p1再减减，循环经行，当p1小于0时退出，返回长度为增加后长度的数组
    public static String replaceSpace(char[] iniString,int length){
        int count = length;
        for (int i = 0; i < length; i++) {
            if (iniString[i] == ' ') {
                count += 2;
            }
        }
        int p1 = length - 1;
        int p2 = count - 1;
        while (p1 >= 0) {
            if (iniString[p1] == ' ') {
                iniString[p2--] = '0';
                iniString[p2--] = '2';
                iniString[p2--] = '%';
            } else {
                iniString[p2--] = iniString[p1];
            }
            p1--;
        }
        return new String(iniString, 0, count);
    }

}
